﻿function actualizarInstitucionSeleccionada() {
    globalInstitucion = $('select[name=instituciones] option:selected').val();
    globalInstitucionString = $('select[name=instituciones] option:selected').text();
    $("#institucionSelected").text(" - " + globalInstitucionString);
}

function esconderBotonSeleccion(posicion, modulo) {
    $("#seleccion" + posicion + "Modulo" + modulo).css({ display: 'none' });
}
function mostrarBotonSeleccion(posicion, modulo, texto) {
    var elemento = $("#seleccion" + posicion + "Modulo" + modulo);
    elemento.html(texto+' <i class="icon-white icon-remove"></i>')
        .css({ display: 'inline-block' });
}
function esconderOpcionesTipoChart(modulo) {    
    $("#divradioModulo" + modulo).css({ display: 'none' });
}
function mostrarOpcionesTipoChart(modulo) {
    $("#divradioModulo" + modulo).css({ display: 'inline-block' });
}
function actualizarNombreHijo() {
    $("#ubicacion").text(treeHijo);
}
function actualizarFecha() {
    log("btn actualizar fecha event");
    if (botonEscogido == false) {
        usuarioFechaInicial = $('#PCfechaInicial').val();
        usuarioFechaFinal = $('#PCfechaFinal').val();
        globalSeleccionFecha = -1;
    }
    var texto = "";    
    texto = "Desde " + usuarioFechaInicial + " hasta " + usuarioFechaFinal;
    
    $("#fecha").text(texto);
    actualizarInstitucionSeleccionada();
    infoModulo[1].getActualizaFuncion()();
}

function actualizarFechaDatePicker(inicio, fin, valorFecha) {
    usuarioFechaInicial = inicio;
    usuarioFechaFinal = fin;
    globalSeleccionFecha = valorFecha;
    //usuarioFechaInicial = "02/02/2013"
    //usuarioFechaFinal = "03/03/2013"
    //log("actualizarFechaDatePicker fechainicio:" + inicio + "|" + usuarioFechaInicial + "|fin :" + fin + "|" + usuarioFechaInicial);
    //var texto = "Desde " + usuarioFechaInicial + " hasta " + usuarioFechaFinal;
    //$("#fecha").text(texto);
    botonEscogido = true;
    actualizarFecha();
}

function actualizarNombreHijoTotal() {
    actualizarNombreHijo();
    for (var i = 2 ; i < infoModulo.length; i++) {
        log("hijo" + i);
        //if ( !( nivelHijo && i == 4 ) )
            infoModulo[i].getActualizaFuncion()();
    }
}

function funcionBackHandler() {
    if (nivelHijo) {
        mostrarOpcionesTipoChart(4);
        objetoTree.subir2Niveles();
        //console.log("NIVELHIJO SUBO2");
    }
    else {
        objetoTree.subirNivel();
    }
    nivelHijo = false;
    
    console.log("NIVEL ACTUAL TREE:"+objetoTree.getNivel());
}
function funcionSelectHandler(hijo, padre, cantidad) {
    //console.log("NODO :"+hijo+"|"+padre+"|"+cantidad);
    if (parseInt(cantidad) != 0) {
        nivelHijo = true;
    }
    else {
        nivelHijo = false;
    }
    if (padre == null ) {
        objetoTree.iniciar();
    }
    else if (padre != treePadre) {
        if (treePadre == hijo) {
            objetoTree.subirNivel();
        }
        else {
            objetoTree.bajarNivel();
        }
    }
    treeHijo = hijo;
    treePadre = padre;
    console.log("NIVEL ACTUAL TREE:" + objetoTree.getNivel());
}

function funcionMouseOver(hijo, padre, tamanho, color) {
    //$("#divTreeOver").text("Selección :" + hijo);
    mostrarTexto("Selección :" + hijo,"divTreeOver");
}
function funcionMouseOut() {
    mostrarTexto("", "divTreeOver");
}
function mostrarTotal(numeroTotalTx,indice) {
    var texto = "";
    
    if ( numeroTotalTx != null && numeroTotalTx > 0){
        texto = "Total : " + numeroTotalTx + " tx";
    }
    mostrarTexto(texto, "cantidadTotal" + indice);
}

function actualizarModulo1() {
    log("actualizarModulo1: fechaInicio:" + usuarioFechaInicial + " fechaFin:" + usuarioFechaFinal);
    
    reiniciarModulos();
    var indice = 1;
    var dataJson = {
        fechaInicial: usuarioFechaInicial, fechaFinal: usuarioFechaFinal, modulo: indice,
        tipoValorTree: modulo1TipoValorTree, nivelTree: objetoTree.getNivel(),codHijo:codHijo,codPadre : codPadre,
        tipoChart: 0/*infoModulo[indice].getTipoChart()*/,
        institucion: globalInstitucion, puntoEquilibrio: globalPuntoEquilibrio, transaccionesBotonFechaSeleccion: globalSeleccionFecha
    };
    cargando(indice);
    $.getJSON(url, dataJson, function (data) {
        // Create and draw the visualization.
        finCargando(indice);
        log("llego data del tree");
        if (data.error.length > 0) {
            mostrarError(indice, data.error, infoModulo[indice].getDivChart());
            mostrarTotal(-1, indice);
        }
        else {
            treeHijo = data.datos[data.datos.length - 1][0];
            treePadre = null;
            codHijo = data.datos[data.datos.length - 1][4];
            codPadre = null;
            infoModulo[indice].setData(data.datos);
            var funciones = [actualizarNombreHijoTotal, funcionSelectHandler, funcionBackHandler, funcionMouseOver, funcionMouseOut];
            dibujarChart(transformarData(infoModulo[indice].getData()), infoModulo[indice].getDivChart(), funciones,
                        0/*infoModulo[indice].getTipoChart()*/, infoModulo[indice].getColores());
        }

    });
}

function selectHandlerModulo2Nivel1(dato1, dato2, dato3) {
    //alert("modulo 2 " + dato1 + "|" + dato2 + "|" + dato3);
    for (var i = 2; i < infoModulo.length ; i++) {
        //TODO excluido a mi mismo o no
        infoModulo[i].limpiarSeleccion(1);
        infoModulo[i].setTipoTxNivel1(dato3);
        infoModulo[i].getActualizaFuncion()();
    }
    nivelTipoTx = 2;
}
function selectHandlerModulo2Nivel2(dato1, dato2, dato3) {
    for (var i = 2; i < infoModulo.length ; i++) {
        //excluido a mi mismo
        if (i != 2) {
            infoModulo[i].setTipoTxNivel2(dato3);
            infoModulo[i].getActualizaFuncion()();
        }
    }
}
function actualizarModulo2() {
    log("actualizarModulo2: fechaInicio:" + usuarioFechaInicial + " fechaFin:" + usuarioFechaFinal);
    var indice = 2;
    cargando(indice);
    var dataJson = {
        fechaInicial: usuarioFechaInicial, fechaFinal: usuarioFechaFinal, modulo: indice, tipoChart: infoModulo[indice].getTipoChart(),
        institucion: globalInstitucion, puntoEquilibrio: globalPuntoEquilibrio, nivelTreeHijo: treeHijo, nivelTreePadre: treePadre,
        nivelTree: objetoTree.getNivel(), codHijo: codHijo, codPadre: codPadre,
        tipoTxNivel1: infoModulo[indice].getTipoTxNivel1(), tipoTxNivel2: infoModulo[indice].getTipoTxNivel2(),
        estadoTx : infoModulo[indice].getEstadoTx(), transaccionesBotonFechaSeleccion: globalSeleccionFecha
    };
    $.getJSON(url, dataJson, function (data) {
        log("llego data del modulo" + indice);
        finCargando(indice);
        if (data.error.length > 0) {
            mostrarError(indice, data.error, infoModulo[indice].getDivChart());
            mostrarTotal(-1, indice);
        }
        else {
            mostrarTotal( data.cantidadTotal, indice);
            infoModulo[indice].setData(data.datos);
            var evento = selectHandlerModulo2Nivel1;
            if (nivelTipoTx == 2) {
                evento = selectHandlerModulo2Nivel2;
            }
            dibujarChart(transformarData(infoModulo[indice].getData()), infoModulo[indice].getDivChart(), evento,
                        infoModulo[indice].getTipoChart(), infoModulo[indice].getColores());
        }
    });
}

function selectHandlerModulo3(dato1, dato2, dato3) {
    //alert("modulo 3 " + dato1 + "|" + dato2 + "|" + dato3);
    for (var i = 2; i < infoModulo.length ; i++) {
        //TODO excluid a mi mismo o no
        if (i != 3) {
            infoModulo[i].setEstadoTx(dato3);
            infoModulo[i].getActualizaFuncion()();
        }
    }
}
function actualizarModulo3() {
    log("actualizarModulo3: fechaInicio:" + usuarioFechaInicial + " fechaFin:" + usuarioFechaFinal);
    
    var indice = 3;
    cargando(indice);
    var dataJson = {
        fechaInicial: usuarioFechaInicial, fechaFinal: usuarioFechaFinal, modulo: indice, tipoChart: infoModulo[indice].getTipoChart(),
        institucion: globalInstitucion, puntoEquilibrio: globalPuntoEquilibrio, nivelTreeHijo: treeHijo, nivelTreePadre: treePadre,
        nivelTree: objetoTree.getNivel(), codHijo: codHijo, codPadre: codPadre,
        tipoTxNivel1: infoModulo[indice].getTipoTxNivel1(), tipoTxNivel2: infoModulo[indice].getTipoTxNivel2(),
        estadoTx: infoModulo[indice].getEstadoTx(), transaccionesBotonFechaSeleccion: globalSeleccionFecha
    };
    $.getJSON(url, dataJson, function (data) {
        log("llego data del modulo" + indice);
        finCargando(indice);
        if (data.error.length > 0) {
            mostrarError(indice, data.error, infoModulo[indice].getDivChart());
            mostrarTotal(-1, indice);
        }
        else {
            mostrarTotal(data.cantidadTotal, indice);
            infoModulo[indice].setData(data.datos);
            dibujarChart(transformarData(infoModulo[indice].getData()), infoModulo[indice].getDivChart(), selectHandlerModulo3,
                infoModulo[indice].getTipoChart(), infoModulo[indice].getColores());
        }
    });

}
function selectHandlerModulo4(dato1, dato2, dato3) {
    //alert("modulo 4 " + dato1 + "|" + dato2 + "|" + dato3);
    treePadre = treeHijo;
    treeHijo = dato2;
    actualizarNombreHijo();
    objetoTree.bajarNivelDIR();
    for (var i = 2 ; i < infoModulo.length; i++) {
        if ( i != 4){
            infoModulo[i].getActualizaFuncion()();
        }
    }
    
}
function actualizarModulo4() {
    log("actualizarModulo4: fechaInicio:" + usuarioFechaInicial + " fechaFin:" + usuarioFechaFinal);
    var indice = 4;
    cargando(indice);
    var evento = null;
    var tipoChart = infoModulo[indice].getTipoChart();
    if (nivelHijo) {
        evento = selectHandlerModulo4;
        tipoChart = 4;
        esconderOpcionesTipoChart(indice);
    }
    var dataJson = {
        fechaInicial: usuarioFechaInicial, fechaFinal: usuarioFechaFinal, modulo: indice, tipoChart: tipoChart,
        institucion: globalInstitucion, puntoEquilibrio: globalPuntoEquilibrio, nivelTreeHijo: treeHijo, nivelTreePadre: treePadre,
        nivelTree: objetoTree.getNivel(),codHijo:codHijo,codPadre : codPadre,tipoTxNivel1: infoModulo[indice].getTipoTxNivel1(), tipoTxNivel2: infoModulo[indice].getTipoTxNivel2(),
        estadoTx: infoModulo[indice].getEstadoTx(), transaccionesBotonFechaSeleccion: globalSeleccionFecha
    };
    $.getJSON(url, dataJson, function (data) {
        log("llego data del modulo" + indice);
        finCargando(indice);
        if (data.error.length > 0) {
            mostrarError(indice, data.error, infoModulo[indice].getDivChart());
            mostrarTotal(-1, indice);
        }
        else {
            mostrarTotal(data.cantidadTotal, indice);
            infoModulo[indice].setData(data.datos);
            dibujarChart(transformarData(infoModulo[indice].getData()), infoModulo[indice].getDivChart(), evento, tipoChart,
                        infoModulo[indice].getColores());
        }
    });
}

function inicializarPanelDeConfiguracion() {
    log("datepicker");
    var parts = usuarioFechaFinal.split('/');
    //new Date(parts[0], parts[1] - 1, parts[2]); // months are 0-based
    var fechaFinal = new Date(parts[2], parts[1] - 1, parts[0], 0, 0, 0, 0);
    /*
    var fechaFinalTemp = new Date(usuarioFechaFinal);
    var fechaFinal = new Date(fechaFinalTemp.getFullYear(), fechaFinalTemp.getMonth(), fechaFinalTemp.getDate(), 0, 0, 0, 0);
    */

    parts = usuarioFechaRangoInicial.split('/');
    var fechaInicial = new Date(parts[2], parts[1] - 1, parts[0], 0, 0, 0, 0);
    /*
    var fechaInicialTemp = new Date(usuarioFechaRangoInicial);
    var fechaInicial = new Date(fechaInicialTemp.getFullYear(), fechaInicialTemp.getMonth(), fechaInicialTemp.getDate(), 0, 0, 0, 0);
    */
    console.log("FECHAS:" + fechaInicial + "|" + fechaFinal);

    var checkin = $('#PCfechaInicial').datepicker({
        onRender: function (date) {
            return ((date.valueOf() < fechaInicial.valueOf()) || (date.valueOf() > fechaFinal.valueOf())) ? 'disabled' : '';
        }
    }).on('changeDate', function (ev) {
        if (ev.date.valueOf() > checkout.date.valueOf()) {
            var newDate = new Date(ev.date);
            //newDate.setDate(newDate.getDate() + 1);
            checkout.setValue(newDate);
            botonEscogido = false;
        }
        checkin.hide();
        $('#PCfechaFinal')[0].focus();
    }).data('datepicker');
    $('#PCfechaInicial').datepicker('setValue', fechaInicial);
    
    var checkout = $('#PCfechaFinal').datepicker({
        onRender: function (date) {
            return((date.valueOf() < fechaInicial.valueOf()) || (date.valueOf() > fechaFinal.valueOf())) ? 'disabled' : '';
        }
    })
    .on('changeDate', function (ev) {
        checkout.hide();
        botonEscogido = false;
        if (ev.date.valueOf() < checkin.date.valueOf()) {
            var newDate = new Date(ev.date);
            checkin.setValue(newDate);
        }
    }).data('datepicker');
    $('#PCfechaFinal').datepicker('setValue', fechaFinal);

}

function limpiarSelecciones() {
    for (var i = 2 ; i < infoModulo.length ; i++) {
        infoModulo[i].limpiarSelecciones();
    }
}

function reiniciarModulos() {
    objetoTree.iniciar();
    limpiarSelecciones();
}

function inicializar() {
    log("inicializar Tx");
    for (var i = 1; i <= 4 ; i++) {
        cargando(i);
    }
    objetoTree = new ObjetoTree( 5 , 1 );
    //actualizarModulo1();
    inicializarPanelDeConfiguracion();  
    actualizarFecha();
    nivelTipoTx = 1;
    nivelHijo = false;
    tamAltoChart = '290px';
    actualizarInstitucionSeleccionada();
    inicializarArregloDibujarChart();
    //eventos
    $("#btnactualizar").click(actualizarFecha);
    $('#radioModulo1_' + infoModulo[1].getTipoChart()).prop('checked', true);
    /*for (var i = 1; i < infoModulo.length ; i++){
        $('#radioModulo'+i+'_' + infoModulo[i].getTipoChart()).prop('checked', true);
    }*/

}
function eliminarSeleccion(posicion, modulo) {
    //$("#" + idSeleccion).html('Save <i class="icon-white icon-remove"></i>');
    infoModulo[modulo].limpiarSeleccion(posicion);
    infoModulo[modulo].getActualizaFuncion()();
    //$("#" + idSeleccion).hide();
}
function subirNivelTree() {
    tree.goUpAndDraw();
    objetoTree.subirNivel();
}
function cambiarChart(seleccion, modulo) {
    log("cambiarChart modulo:" + modulo + "|seleccion:" + seleccion);
    if (modulo == 1) {
        modulo1TipoValorTree = seleccion;
    }
    else {
        infoModulo[modulo].setTipoChart(seleccion);
    }
    infoModulo[modulo].getActualizaFuncion()();
}